package br.edu.ufcg.dsc.psoo.mymoney.model.dao;

import java.io.Serializable;
import java.util.List;

import org.hibernate.Session;

import br.edu.ufcg.dsc.psoo.mymoney.controller.exceptions.InvalidGroupException;
import br.edu.ufcg.dsc.psoo.mymoney.model.bean.Group;

/**
 * Interface para o DAO de Group
 * 
 * @author leonardo
 * @version 1.0
 * 
 */
public interface GroupDAO {
	/**
	 * Cria novo grupo
	 * 
	 * @param group
	 *            objeto Grupo
	 * @return grupo criado
	 */
	public Group create(Group group);

	/**
	 * Apaga grupo informado
	 * 
	 * @param group
	 *            objeto Group
	 */
	public void delete(Group group);

	/**
	 * Lista grupos de acordo com os filtros de busca informados
	 * 
	 * @param group
	 *            grupo
	 * @return lista de grupos
	 */
	public List<Group> find(Group group);

	//TODO atualizar javadoc
	public List<Group> findByName(String name);

	/**
	 * Lista todos os grupos cadastrados
	 * 
	 * @return lista de grupos
	 */
	public List<Group> listAll();

	/**
	 * Carrega grupo com o identificador informado
	 * 
	 * @param id
	 *            identificador do grupo
	 * @return grupo carregado do banco
	 */
	public Group load(Serializable id);

	/**
	 * Seta sess�o do Hibernate no DAO
	 * 
	 * @param session
	 *            sess�o
	 */
	public void setSession(Session session);

	/**
	 * Atualiza grupo informado
	 * 
	 * @param group
	 *            objeto Group
	 * @return grupo alterado
	 * @throws Exception
	 *             erro de id n�o existente
	 */
	public Group update(Group group) throws InvalidGroupException;
}